package com.hl.springboot4.filterintcepter;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hl.springboot4.util.R;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @ClassName MyIncepter
 * @Description TODO
 * @Author libowen
 * @Date 2025年03月06日 11:23
 * @Version 1.0
 */
public class MyIncepter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println("请求到达hander之前执行");
        // 从请求头中获取token，如果有token则放行，如果没有则拦截
        String token = request.getHeader("token");
        if (token == null || token.isEmpty()) {
            ServletOutputStream out = response.getOutputStream();
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/json;charset=UTF-8");
            R r = R.fail("你还没有登录，请登录后再操作");
            r.setCode(401);
            new ObjectMapper().writeValue(out,r);
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("请求到达hander之后执行");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("请求完成之后执行");
    }
}
